[2020] 정보 처리 기사 실기 5-서버 프로그램 구현

JIGGLYPOP

염동환


새로운 개발을 좋아하는 개발자

2020-07-16 06:31 시에 저장한 글입니다.

정보처리기사 공부 후 정리 자료입니다. 정확하지 않을 수 있으니 꼭 책을 참고해서 공부하세요 2020 정보 처리 기사 서버 프로그램 구현 요약 입니다. 정처기 공부를 할 때 활용하세요.

1. 개발 환경 구축 - 하드웨어 환경


  • 개발 환경 구축 : 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것
  • 하드웨어 환경(클라이언트 , 서버)
  • 클라이언트 : 사용자와의 인터페이스 역할
  • 서버 : 클라이언트와 통신하여 서비스를 제공
  • 서버의 분류
  • 웹 서버 : 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공
  • 웹 애플리케이션서버(WAS) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버
  • 데이터베이스 서버(DB) : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
  • 파일 서버 : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버

2. 개발 환경 구축 - 소프트웨어 환경


  • 시스템 소프트웨어 : 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등
  • 개발 소프트웨어
  • 요구사항 관리 도구 : 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
  • 설계 / 모델링도구 : UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
  • 구현 도구 : 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
  • 빌드 도구 : 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어
  • 테스트 도구 : 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어
  • 형상 관리 도구 : 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어

3. 모듈(Module)


  • 모듈화를 통해 분리된 시스템의 각 기능들(= 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미)
  • 모듈화(결합도의 최소화, 응집도의 최대화 추구) : 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 분해하는 것
  • 모듈의 기능적 독립성 : 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미하는 것, 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어짐
  • 모듈의 독립성(결약응강)

    • 결합도(Coupling)와 응집도(Cohesion)에 의해 측정, 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결 가능
    • 높은 독립성 :  모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게

4. 결합도(Coupling)


  • 결합도 : 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
  • 결합도 약한 순서(결합도가 약할수록 품질이 높음)(자스제외공내)
  • 자료 결합도(Data Coupling) : 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도, 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨주고, 호출 받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식
  • 스탬프(검인) 결합도(Stamp Coupling) : 모듈 간의 인터페이스로 배열이나 레코드등의 자료 구조가 전달될 때의 결합도
  • 제어 결합도(Control Coupling) : 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소(Function Code,Switch, Tag, Flag)를 전달하는 결합도
  • 외부 결합도(External Coupling) : 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도
  • 공통(공유) 결합도(Common Coupling) : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도
  • 내용 결합도(Content Coupling) : 한 모듈이 다른 모듈의 내부 기능 및 그내부 자료를 직접 참조하거나 수정할 때의 결합도

5. 응집도(Cohesion)


  • 응집도 : 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 모듈이 독립적인 기능으로 정의되어 있는 정도
  • 응집도 강한 순서(응집도가 강할수록 품질이 높음)(기순교절시논우)
  • 기능적 응집도(Functional Cohesion) : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
  • 순차적 응집도(Sequential Cohesion) : 모듈 내 하나의 활동으로부터 나온 출력데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
  • 교환(통신)적 응집도(Communication Cohesion) : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도
  • 절차적 응집도(Procedural Cohesion) : 모듈이 다수의 관련 기능을 가질 때 모듈안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
  • 시간적 응집도(Temporal Cohesion) : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
  • 논리적 응집도(Logical Cohesion) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
  • 우연적 응집도(Coincidental Cohesion) : 모듈 내부의 각 구성 요소들이 서로 관련없는 요소로만 구성된 경우의 응집도

6. 팬인(Fan-In) / 팬아웃(Fan-Out)


  • 팬인 : 어떤 모듈을 제어(호출)하는 모듈의 수
  • 팬아웃 : 어떤 모듈에 의해 제어(호출)되는 모듈의 수
  • 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있으나, 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
img

7. 공통 모듈


  • 공통 모듈 : 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미(자주 사용되는 계산식, 매번 필요한 사용자 인증 등)
  • 준수사항
  • 정확성(Correctness) : 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성
  • 명확성(Clarity) : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성
  • 완전성(Completeness) 시스템 구현을 위해 필요한 모든 것을 기술
  • 일관성(Consistency) : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성
  • 추적성(Traceability) : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성

8. 재사용(Reuse)


  • 비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성하여 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업
  • 재사용 규모에 따른 분류
  • 함수와 객체 : 클래스나 메소드 단위의 소스 코드를 재사용
  • 컴포넌트 : 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용
  • 애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용

9. DBMS 접속(Connection)


  • 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것 ,응용 시스템은 사용자로부터 매개 변수를 전달받아 SQL을 실행하고 DBMS로부터 전달받은 결과를 사용자에게 전달하는 매개체 역할을 수행, 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근
  • DBMS 접속 기술 : DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크 등을 의미

    • JDBC(Java DataBase Connectivity) : Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API
    • ODBC(Open DataBase Connectivity) : 데이터베이스에 접근하기 위한 표준 개방형 API, 개발 언어에 관계없이 사용 가능
    • MyBatis : JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크, SQL을 거의 그대로 사용할 수 있어 SQL 친화적인 국내 환경에 적합하여 많이 사용`
  • 프레임워크(Framework) : 특정 기능을 수행하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체

    • 동적 SQL(Dynamic SQL) : 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식 사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행 가능, 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능
    • 정적 SQL : SQL 코드를 변수에 담지 않고 코드 사이에 직접 기술한 SQL문

10. 서버 개발


  • 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것
  • 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환하는 역할 ( Java, JavaScript, Python, PHP, Ruby 등 )
  • 서버 개발 프레임워크
  • spring : JAVA 기반 프레임워크, 전자정부 표준 프레임워크의 기반 기술
  • Node.js : JavaScript 기반 프레임워크로, 비동기 입·출력 처리와 이벤트 위주의 높은처리 성능을 갖고 있어 실시간으로 입·출력이 빈번한 애플리케이션에 적합
  • Django : Python 기반 프레임워크, 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원
  • Codeigniter : PHP를 기반 프레임워크, 인터페이스가 간편하며 서버 자원을 적게 사용
  • Ruby on Rails : Ruby를 기반 프레임워크, 테스트를 위한 웹 서버를 지원하며 데이터베이스작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발이 가능
  • 프레임워크의 특징(모재확제)
  • 모듈화(Modularity) : 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로서 소프트웨어의 품질을 향상
  • 재사용성(Reusability) : 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상
  • 확장성(Extensibility) : 다형성(Polymorphism)을 통한인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능
  • 제어의 역흐름(Inversion of Control) : 개발자가 관리하고 통제해야 하는 객체들의제어 권한을 프레임워크에 넘김으로써 생산성을 향상

11. 서버 개발 과정


  • 서버 개발은 DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어짐
  • DTO(Data TransferObject)/VO(ValueObject) 구현 : 데이터 교환을 위해 사용할 객체를 만드는 과정

    • 변수 및 객체를 송·수신할 데이터의 자료형(Data Type)에 알맞게 생성
    • 알고리즘 등의 로직은 구현하지 않고, 변수와 데이터를 저장하고 반환하는 메소드만 구현
  • SQL 구현 : 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정

    • SQL문은 소스 코드 내에 직접 입력하거나, 별도의 XML 파일로 저장하여 관리
    • XML 파일로 SQL문을 관리하는 경우 중복되는 SQL문을 최소화할 수 있고, 유지보수가 간편
  • DAO(Data AccessObject) 구현 : 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정
  • Service 구현 : 사용자의 요청에 응답하기 위한 로직을 구현하는 과정
  • Controller 구현 : 사용자의 요청에 적절한 서비스를 호출하여,그 결과를 사용자에게 반환하는 코드를 구현하는 과정

12. 배치 프로그램(Batch Program)


  • 배치 프로그램 : 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미
  • 배치 프로그램의 유형 :(정이온)

    • 정기 배치 : 정해진 시점(주로 야간)에 정기적으로 실행
    • 이벤트성 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행
    • 온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행
  • 배치 스케줄러(Batch Scheduler) : 일괄 처리(Batch Processing)작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
  • 스프링 배치(Spring Batch) : Spring Source 사와 Accenture 사가 2007년 공동 개발한 오픈소스 프레임워크. 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 기능을 제공 ( 주요 구성 요소 : Job, Job Launcher, Step, Job Repository )
  • Quartz : 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리 ( 주요 구성 요소 : Scheduler, Job, JobDetail, Trigger)
  • Cron : 리눅스의 스케줄러 도구로 crontab 명령어를 통해 작업 예약 가능